package com.cmc.cloud.cmclink.doc.service.si;

import com.cmc.cloud.cmclink.doc.entity.BlnoBlPrintLogDO;
import com.cmc.cloud.cmclink.doc.entity.BlnoDO;
import com.cmc.cloud.cmclink.doc.vo.blnoblprintlogvo.*;
import com.cmes.framework.common.pojo.PageResult;

import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.io.File;
import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * 提单打印 Service 接口
 *
 * @author 集运管理员
 */
public interface BlnoBlPrintLogService {

    /**
     * 创建提单打印
     *
     * @param createReqVO 创建信息
     */
    void createBlnoBlPrintLog(@Valid BlnoBlPrintLogCreateReqVO createReqVO);

    /**
     * 更新提单打印
     *
     * @param updateReqVO 更新信息
     */
    void updateBlnoBlPrintLog(@Valid BlnoBlPrintLogUpdateReqVO updateReqVO);

    /**
     * 删除提单打印
     *
     * @param id 编号
     */
    void deleteBlnoBlPrintLog(Long id);

    /**
     * 获得提单打印
     *
     * @param id 编号
     * @return 提单打印
     */
    BlnoBlPrintLogDO getBlnoBlPrintLog(Long id);

    /**
     * 获得提单打印列表
     *
     * @param ids 编号
     * @return 提单打印列表
     */
    List<BlnoBlPrintLogDO> getBlnoBlPrintLogList(Collection<Long> ids);

    /**
     * 获得提单打印分页
     *
     * @param pageReqVO 分页查询
     * @return 提单打印分页
     */
    PageResult<BlnoBlPrintLogDO> getBlnoBlPrintLogPage(BlnoBlPrintLogPageReqVO pageReqVO);

    /**
     * 获得新的提单打印分页（带默认过滤条件）
     *
     * @param pageReqVO 分页查询
     * @return 提单打印分页
     */
    PageResult<PrintBlRespVo> getPrintBlPage(PrintBlReqVo pageReqVO);

    /**
     * 打印编辑
     * @param createReqVO 打印编辑参数
     * @return 打印编辑结果
     */
    byte[] pdfCreateAnEdit(BlnoBlPrintLogCreateReqVO createReqVO);


    /**
     * 打印编辑
     * @param blnoPrintBatchOperationReqDto 打印操作请求
     * @return 打印操作结果文件
     */
    File batchPrintBl(BlnoPrintBatchOperationReqDto blnoPrintBatchOperationReqDto);


    /**
     * 获得提单打印预览
     * @param blnoId 提单ID
     * @return 提单打印记录
     */
    BlnoBlPrintLogDO getBlnoBlPrintLogPreview(Long blnoId);

    /**
     * 获得提单维护信息
     * @param blnoId 提单ID
     * @return 提单维护信息
     */
    BlnoMaintenanceInfoRespVO getBlnoMaintenanceInfo(Long blnoId,String printType);

    /**
     * 周贤用打印草稿
     * @param response 响应对象
     * @param blnoId 提单ID
     */
    void printTheDraft(HttpServletResponse response, Long blnoId);

    /**
     * 提单历史记录
     * @param blnoBlPrintLogListByBlnoIdReqVO 提单历史记录参数
     * @return 提单历史记录
     */
    List<BlnoBlPrintLogDO> billsHistoricalRecords(BlnoBlPrintLogListByBlnoIdReqVO blnoBlPrintLogListByBlnoIdReqVO);

    /**
     * 检查提单主体
     * @param blnoDO 提单主表对象
     * @return 返回航线提单主体，提单主表提单主体不为空时返回null，为空时查询航线提单主体并返回
     */
    String checkBlEntity(BlnoDO blnoDO);
    /**
     * 更新提单主体
     * @param blnoDO 提单主表对象
     * @param blEntity 提单主体
     *
     */
    void updateBlEntiyt(BlnoDO blnoDO,String blEntity);
    /**
     * 更新提单主体
     * @param blnoDO 提单主表对象
     * @param fileType 打印操作类型
     * @return 打印文件对象
     */
    Map<String, File> flushPrintFile(BlnoDO blnoDO, String fileType);

}
